package com.lingjtx.common.core.constant;

public interface MqConst {

    String IM_EXCHANGE_NAME = "im.exchange";

    String IM_ROUTING_MAIN_KEY = "im.route.main";
    String IM_ROUTING_NODE_KEY = "im.route.server.";

    String IM_QUEUE_MAIN = "im.queue.main";
    String IM_QUEUE_NODE = "im.queue.server.";

    String IM_QUEUE_PRIVATE_CHAT = "im.queue.private_chat";
    String IM_QUEUE_GROUP_CHAT = "im.queue.group_chat";
    String IM_QUEUE_KEFU_CHAT = "im.queue.kefu_chat";
    String IM_QUEUE_SYSTEM_NOTICE = "im.queue.system_notice";
    String QUEUE_NOTIFICATION_PUSH = "queue.notification_push";

    /**
     * 下发主题
     * 第一个参数代表产品类型；第二个代表设备mac
     */
    interface MqttPublisherTopic {
        // 系统客户端连接遗嘱消息主题
        String ACTION_SYS_SERVER = "system/v1/server/%s/up/" + MqttAction.STATUS;

        String ACTION_INFO = "lingjtx/%s/%s/down/" + MqttAction.INFO;
        String ACTION_RENEW = "lingjtx/%s/%s/down/" + MqttAction.RENEW;
        String ACTION_SWITCH = "lingjtx/%s/%s/down/" + MqttAction.SWITCH_STATUS;
        String ACTION_OTA = "lingjtx/%s/%s/down/" + MqttAction.OTA;
        String ACTION_GATEWAY = "lingjtx/%s/%s/down/" + MqttAction.GATEWAY;
    }

    /**
     * 订阅主题
     */
    interface MqttSubscriberTopic {

        // EMQX 支持 MQTT 共享订阅（Shared Subscription）
        // 共享订阅：一个消息只会被一个订阅了该共享主题的客户端实例消费
        // 共享订阅格式：$share/{group_id}/{topic}
        // MQTT topic: temperature
        // Shared topic: $share/myGroup/temperature
        // 所有订阅了相同 {group_id} 的客户端，会被认为是同一个消费组，来自 Broker 的一条消息只会被该组中的一个客户端消费，即“组内负载均衡”
        // 不同应用之间都能收到消息，应该让它们用 不同的 group_id

        // mqtt 主题中字符：+ 是占位符，# 是通配符，$ 是与 $share 一起，代表共享订阅
        // 系统客户端连接遗嘱消息主题订阅端
        String MQTT_TOPIC_SYS_SERVER = "system/v1/server/+/up/#"; // + 代表服务nodeid
        String MQTT_TOPIC_LINGJTX = "lingjtx/+/+/+/up/#"; // 第一个+代表版本号；第二个 + 代表产品类型；第三个代表设备mac

        // 通信管理机的主题格式：以 cm（Communication Management） 开头；第二个是版本号；倒数第二个是companyId
        // 格式 [ cm/{version}/{productId}/{mac}/up/{companyId}/{action} ]
        String MQTT_TOPIC_COMMUNICATION_MANAGEMENT = "cm/+/+/+/up/+/#";

        String SHARE_GROUP = "$share/group/";
    }
}
